[READ-ONLY] a fast, modern browser for the npm registry
at main 39 lines 1.3 kB view raw
1import { CACHE_MAX_AGE_ONE_HOUR, ERROR_NPM_FETCH_FAILED } from '#shared/utils/constants' 2import { resolvePackageReadmeSource } from '#server/utils/readme-loaders' 3 4/** 5 * Returns rendered README HTML for a package. 6 * 7 * URL patterns: 8 * - /api/registry/readme/packageName - latest version 9 * - /api/registry/readme/packageName/v/1.2.3 - specific version 10 * - /api/registry/readme/@scope/packageName - scoped package, latest 11 * - /api/registry/readme/@scope/packageName/v/1.2.3 - scoped package, specific version 12 */ 13export default defineCachedEventHandler( 14 async event => { 15 try { 16 const packagePath = getRouterParam(event, 'pkg') ?? '' 17 const { packageName, markdown, repoInfo } = await resolvePackageReadmeSource(packagePath) 18 19 if (!markdown) { 20 return { html: '', mdExists: false, playgroundLinks: [], toc: [] } 21 } 22 23 return await renderReadmeHtml(markdown, packageName, repoInfo) 24 } catch (error: unknown) { 25 handleApiError(error, { 26 statusCode: 502, 27 message: ERROR_NPM_FETCH_FAILED, 28 }) 29 } 30 }, 31 { 32 maxAge: CACHE_MAX_AGE_ONE_HOUR, 33 swr: true, 34 getKey: event => { 35 const pkg = getRouterParam(event, 'pkg') ?? '' 36 return `readme:v8:${pkg.replace(/\/+$/, '').trim()}` 37 }, 38 }, 39)